package 抽象类;
/*
抽象类：是类和类之间有共同特征，将这些具有共同特征的类进一步抽象形成抽象类，由于类本身是不存在的，所以抽象类无法创建对象（无法实例化）
抽象类和抽象类实际上还有可能有共同特征，还可以进一步抽象
类到对象是实例化，对象到类是抽象
抽象类：类和类之间有共同特征，将这些特征提取出来，形成的就是抽象类，属于引用数据类型
语法：
[修饰符列表] abstract class 类名{
      类体;
}
抽象类：                            银行账户类
类：          信用卡类                                          储蓄卡类         （类是现实世界不存在的，人类大脑思考总结的结果）
对象：小明的信用卡   小花的信用卡                         小明的储蓄卡     小美的储蓄卡        （对象是现实世界存在的）
1.抽象类无法实例化，无法创建对象，有构造方法，供子类使用
2.抽象类是用来被子类所继承的
3.final和abstract是对立的，二者不能同时出现
4.抽象类的子类还可以是抽象类
5.抽象方法：没有实现的方法，没有方法体的方法
例：public abstract void doSome();
特点：没有方法体，以分号结尾，前面修饰符列表中有abstract关键字
6.抽象类中可以有抽象方法，也可以有非抽象方法，但抽象方法必须出现在抽象类中
 */
public class abstractTest {
  public static void main(String[] args) {
   /* 报错，无法实例化
   Account c=new Account() ;*/
  }
}
//银行账户类
abstract class Account{
  int i;
 public Account(){

 }
}
//子类继承抽象类，子类可以实例化
class creditAccount extends Account{
  public  creditAccount(){
    super();//子类中的构造方法调用父类的构造方法（无参构造方法，若父类中的写了有参构造，系统默认的无参构造就会消失，从而super（）没加实参（加上具体类型参数即可）而报错）
  }
}
